#! /bin/sh
# @@@ START COPYRIGHT @@@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# @@@ END COPYRIGHT @@@

# Like the pattern-masking of QACOMP, here we filter out such stuff as
# timestamps and generated identifiers.  Called by the runregr script
# before doing diff.

fil=$1
if [ "$fil" = "" ]; then
  echo "Usage: $0 filename"
  exit 1
fi

# Remove following types of lines:
#   Lines started with "Start Time", "End Time", "Elapsed Time",
#                      "Execution Time", "Table ID: ddddddddd", and
#                      "Hist ID: ddddddddd"
ON_A_VM=
SYSVENDOR="$(cat /sys/class/dmi/id/sys_vendor)"
if [[ ( "${SYSVENDOR/OpenStack/}" != "$SYSVENDOR" ) ||
      ( "${SYSVENDOR/VMware/}"    != "$SYSVENDOR" ) ]]; then
  # Running on an OpenStack or VMware virtual machine
  ON_A_VM=yes
fi
if [[ "$SQ_BUILD_TYPE" = "release" ]]; then
sed "
/Start Time.*/d
" $fil |
sed "/End Time.*/d" |
sed "/Elapsed Time.*/d" |
sed "/Execution Time.*/d" |
sed "/Table ID.*/d" |
sed "/Hist ID.*/d" |
awk '
{
# we are looking for a less than 1 ms compile time
#   but we accept time up to 1.4 ms because of other loads
#   and time up to 2.0 ms on a virtual machine
#   when the test is being run
# Acceptable compile time is no more than 00:00:01.001399
#   or on a virtual machine, no more than 00:00:01.001999
# Examples of patterns to classify:
#  1.  "Compile Time 00:00:01.001047" --> FAILED (at least one second)
#  2.  "Compile Time 00:00:00.001470" --> FAILED (more than 1ms)
#  3.  "Compile Time 00:00:00.000870" --> SUCCESS(less than 1ms)
#  4.  "Compile Time 00:00:00.001200" --> SUCCESS(less than 1ms)
#  5.  "Compile Time 00:00:00.001821" --> SUCCESS(less than 1ms)  only on a VM
   if ( $1 == "Compile"  && $2 == "Time" ) { \
     split($3, a, "."); \
     if ( !match(a[1], "00:00:00") ) \
       print "FAIL (at least one second)", $0; \
     else { \
              split(a[2], b, ""); \
              if ((b[1] == 0) && (b[2]==0) &&  \
                  ((b[3] == 0) || ((b[3] == 1) && ((b[4] < 4) || (ENVIRON["ON_A_VM"] = "yes"))) )) \
                  print "SUCCESS (less than 1ms)"; \
              else \
                  print "FAIL (at least 1ms)", $0; \
     }; \
   } else \
     print; \
}
'
fi

if [[ "$SQ_BUILD_TYPE" = "debug" ]]; then
sed "
/Start Time.*/d
" $fil |
sed "/End Time.*/d" |
sed "/Elapsed Time.*/d" |
sed "/Execution Time.*/d" |
sed "/Table ID.*/d" |
sed "/Hist ID.*/d" |
sed "/Compile Time.*/d"
fi

